#ifndef IO
#define IO
#include <stdio.h>
#include <stdlib.h>
#include "processo.h"

typedef struct celula *Apontador;
typedef struct celula {
	processo_simulado *processo;
	Apontador prox;
} celula;


typedef struct {
	int numero_processos;
	Apontador primeiro, ultimo;
} Lista;

/*Funções da lista*/
void criarLista(Lista *L1);
void desalocarLista (Lista *L1);
void mostrarLista (Lista *L1);
void ordenarLista (Lista *L1, int tipo_ordenacao);
void inserirElemento(processo_simulado *p, Lista *L1);
Apontador buscarElemento(int x, Lista *L1);
int Vazia(Lista *L1);

/*Funções referentes aos processos*/
instrucoes *alocar_vetor(int n);
processo_simulado *criar_processo();
instrucoes *liberar_vetor (instrucoes *v);
apontador *alocar_tabela_processos (int n);
void adiciona_processo_pcb(processo_simulado *p);
void adiciona_processo_lista_bloqueados(processo_simulado *p);
void adiciona_processo_lista_prontos(processo_simulado *p);
void remover_processo(int id, int tipo_lista);
void remover_tabela_pcb(int id);
void imprime_lista_processos(apontador *p, int tipo);

#endif
